using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Practices.ObjectBuilder;
using Microsoft.Practices.CompositeWeb;
using System.Transactions;
using GC2.Entities.Admin;
using GC2.ExceptionHandler.Services;
using GC2.DataAccess.DAAdmin;

namespace GC2.Bussines.BMAdmin
{
    public class BMCompras
    {
        public BMCompras(string coneccion) 
        {
            this.Connection = coneccion;
        }

        private string connection = "";
        public string Connection
        {
            get { return connection; }
            set { connection = value; }
        }

        private Compras oCompras = new Compras();
        private List<Compras> listaCompras= new List<Compras>();
        private DACompras daCompras = new DACompras();

        #region BMComprasSearch
        public List<Compras> BMComprasSearch(Compras compraD, Compras compraH)
        {
            try
            {
                listaCompras = daCompras.DAcomprasSearch(connection, compraD, compraH);
                return listaCompras;
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion

        #region BMComprasInsert
        public void BMComprasInsert(Compras compra)
        {
            try
            {
                daCompras.DAComprasInsert(connection, compra);
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion

        #region BMComprasUpdate
        public void BMComprasUpdate(Compras compra)
        {
            try
            {
                daCompras.DAComprasUpdate(connection, compra);
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion  

        #region BMComprasGetNext
        public Compras BMComprasGetNext()
        {
            try
            {
                oCompras = daCompras.DAComprasGetNext(connection);
                return oCompras;
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion

        #region RptCompras
        public List<Compras> listaComprasRpt(List<Compras> listaCompras)
        {
            try
            {
                return listaCompras;
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion

        #region RptLibroCompras
        public List<Compras> RptLibroCompras(int pMes, int pAnio)
        {
            try
            {
                List<Compras> listaComprasRpt = new List<Compras>();
                oCompras = new Compras();
                oCompras.PFMes = pMes;
                oCompras.PFAnio = pAnio;
                oCompras.Id_Estado = 1;
                oCompras.CCostos = 999;   // esto hace que entren todos los centros de costos.
                listaCompras = daCompras.DAcomprasSearchAll(Connection, oCompras, oCompras);
                DAComprasDet daComprasDet = new DAComprasDet();
                ComprasDet compraDet = new ComprasDet();
                foreach (Compras compra in listaCompras)
                {
                    compra.Total = 0;
                    compra.Impuesto = 0;
                    compra.TTotal = 0;

                    compraDet.Id_Compras = compra.Id_Compras;
                    List<ComprasDet> listaComprasDet = new List<ComprasDet>();

                    listaComprasDet = daComprasDet.DAComprasDetGetAll(Connection, compraDet);
                    foreach (ComprasDet itemDet in listaComprasDet)
                    {
                        switch (itemDet.TTasa)
                        {
                            case 1:
                                compra.Impuesto1 += itemDet.Impuesto;
                                compra.Impuesto += itemDet.Impuesto;
                                break;
                            case 2:
                                compra.Impuesto2 += itemDet.Impuesto;
                                compra.Impuesto += itemDet.Impuesto;
                                break;
                            case 3:
                                compra.Impuesto3 += itemDet.Impuesto;
                                compra.Impuesto += itemDet.Impuesto;
                                break;
                            case 4:
                                compra.Impuesto4 += itemDet.Impuesto;
                                compra.Impuesto += itemDet.Impuesto;
                                break;
                            case 5:
                                compra.Impuesto5 += itemDet.Impuesto;
                                compra.Impuesto += itemDet.Impuesto;
                                break;
                            case 6:
                                compra.ImpuestoFijo += itemDet.Impuesto;
                                compra.Impuesto += itemDet.Impuesto;
                                break;
                            default:
                                break;
                        }
                        compra.Total += itemDet.Monto;
                        compra.TTotal += itemDet.Monto + itemDet.Impuesto;
                    }
                }

                return listaCompras;
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion
    }
}
